from typing import List
import q

"""
实现获取下一个排列的函数，算法需要将给定数字序列重新排列成字典序中下一个更大的排列。

如果不存在下一个更大的排列，则将数字重新排列成最小的排列（即升序排列）。

必须原地修改，只允许使用额外常数空间。

以下是一些例子，输入位于左侧列，其相应输出位于右侧列。
1,2,3 → 1,3,2
3,2,1 → 1,2,3
1,1,5 → 1,5,1

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/next-permutation
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。


原理：找到nums[i+1]> nums[i]的最后一个元素，取后面比nums[i]大一点的一个元素交换位置，然后后面的升序排序
如果找不到，那就直接升序排序，或者逆序输出

1,2,3,4
1,2,4,3
1,3,2,4
...
4,3,2,1
----------------
cost 2450
"""


class Solution:
    def nextPermutation(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        sign = None
        for i in range(len(nums) - 1):
            print(i)
            if nums[i] < nums[i + 1]:
                sign = i
        if sign is not None:
            big_index = sign + 1
            for i in range(big_index, len(nums)):
                if nums[sign] < nums[i] and nums[i] < nums[big_index]:
                    big_index = i
            print("sign=", sign, big_index)
            q / big_index
            nums[sign], nums[big_index] = nums[big_index], nums[sign]
            print(nums)
            nums[sign + 1 :] = sorted(nums[sign + 1 :])
            print(nums)

        else:
            nums.sort()

